-- Kreiranje baze podataka ako ne postoji
CREATE DATABASE IF NOT EXISTS mjerenjeproba CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Korištenje baze podataka
USE mjerenjeproba;

-- Tablica za dokumente
CREATE TABLE IF NOT EXISTS documents (
    id INT AUTO_INCREMENT PRIMARY KEY,
    original_name VARCHAR(255) NOT NULL,
    file_path VARCHAR(255) NOT NULL,
    file_type VARCHAR(50) NOT NULL,
    upload_date DATETIME NOT NULL,
    marked_file_path VARCHAR(255),
    excel_file_path VARCHAR(255),
    user_id INT, -- ID korisnika koji je uploadao dokument (za buduću autentifikaciju)
    status ENUM('processing', 'completed', 'failed') DEFAULT 'processing',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_status (status) -- Indeks za brzo filtriranje po statusu
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tablica za kategorije
CREATE TABLE IF NOT EXISTS categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    code VARCHAR(50) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_code (code) -- Jedinstveni indeks za kod kategorije
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tablica za podkategorije
CREATE TABLE IF NOT EXISTS subcategories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_id INT NOT NULL,
    name VARCHAR(100) NOT NULL,
    code VARCHAR(50) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_category_id (category_id), -- Indeks za brzo dohvaćanje podkategorija za kategoriju
    UNIQUE KEY uk_category_code (category_id, code), -- Osigurava jedinstveni kod unutar kategorije
    FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tablica za dimenzije
CREATE TABLE IF NOT EXISTS dimensions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    document_id INT NOT NULL,
    number INT NOT NULL,
    text VARCHAR(255) NOT NULL,
    dimension_type VARCHAR(50) NOT NULL,
    subtype VARCHAR(50),
    page INT DEFAULT 1,
    x_position FLOAT,
    y_position FLOAT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_document_id (document_id), -- Indeks za brzo dohvaćanje dimenzija za dokument
    INDEX idx_dimension_type (dimension_type, subtype), -- Indeks za brzo filtriranje po tipu i podtipu
    FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tablica za povijest promjena dimenzija
CREATE TABLE IF NOT EXISTS dimension_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dimension_id INT NOT NULL,
    text_before VARCHAR(255),
    text_after VARCHAR(255),
    type_before VARCHAR(50),
    type_after VARCHAR(50),
    subtype_before VARCHAR(50),
    subtype_after VARCHAR(50),
    changed_by INT, -- ID korisnika koji je napravio promjenu
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_dimension_id (dimension_id), -- Indeks za brzo dohvaćanje povijesti za dimenziju
    FOREIGN KEY (dimension_id) REFERENCES dimensions(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tablica za postavke aplikacije
CREATE TABLE IF NOT EXISTS settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    setting_key VARCHAR(100) NOT NULL,
    setting_value TEXT,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_setting_key (setting_key) -- Jedinstveni indeks za ključ postavke
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Unos osnovnih kategorija
INSERT INTO categories (name, code, description) VALUES 
('Meta data', 'metadata', 'Metadata podaci o tehničkom nacrtu'),
('Features', 'features', 'Značajke tehničkog nacrta'),
('Type', 'type', 'Tipovi podataka na nacrtu');

-- Unos podkategorija za Meta data
INSERT INTO subcategories (category_id, name, code, description) VALUES 
(1, 'Identification & Documentation', 'identification', 'Identifikacijski i dokumentacijski podaci'),
(1, 'Measurements & Units', 'measurements', 'Mjerne jedinice i mjerenja'),
(1, 'Material & Manufacturing', 'material', 'Materijali i proizvodne informacije'),
(1, 'Bill of Material', 'bom', 'Sastavnica materijala');

-- Unos podkategorija za Features
INSERT INTO subcategories (category_id, name, code, description) VALUES 
(2, 'Dimensions', 'dimensions', 'Dimenzije na nacrtu'),
(2, 'Threads', 'threads', 'Navoji na nacrtu'),
(2, 'Roughnesses', 'roughnesses', 'Oznake hrapavosti površina'),
(2, 'GD&Ts', 'gdts', 'Geometrijske dimenzije i tolerancije');

-- Unos podkategorija za Type
INSERT INTO subcategories (category_id, name, code, description) VALUES 
(3, 'COMPANY_DATA', 'company_data', 'Podaci o tvrtki'),
(3, 'LOGO', 'logo', 'Logotip tvrtke');

-- Početne postavke
INSERT INTO settings (setting_key, setting_value, description) VALUES
('app_name', 'Detektor dimenzija', 'Naziv aplikacije'),
('version', '1.0', 'Verzija aplikacije'),
('auto_detection_enabled', 'true', 'Je li automatska detekcija dimenzija omogućena'),
('default_export_format', 'xlsx', 'Zadani format za izvoz podataka');